package com.example.practicacalculadora;



import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.Button;
import android.widget.TextView;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.PorterDuff;

public class MainActivity extends Activity {
	private Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,punto,suma,resta,multi,div,positivo,igual,borrarUno,borrar;
	private TextView texto;
	private Button memoria;
	private boolean primerNumero=true,primerOperacion=false,primerMemoria=false;
	private char operacion1;
	private double valor1=0,valor2=0,total=0;
	private String memo;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		MyListener l= new MyListener(this);
		
		//Asignaci�n al objeto boton de java su correspondiente de xml
		texto = (TextView)findViewById(R.id.Texto);
		b0 = (Button)findViewById(R.id.B0);
		b1 = (Button)findViewById(R.id.B1);
		b2 = (Button)findViewById(R.id.B2);
		b3 = (Button)findViewById(R.id.B3);
		b4 = (Button)findViewById(R.id.B4);
		b5 = (Button)findViewById(R.id.B5);
		b6 = (Button)findViewById(R.id.B6);
		b7 = (Button)findViewById(R.id.B7);
		b8 = (Button)findViewById(R.id.B8);
		b9 = (Button)findViewById(R.id.B9);
		punto = (Button)findViewById(R.id.PUNTO);
		suma = (Button)findViewById(R.id.SUMA);
		resta = (Button)findViewById(R.id.RESTA);
		multi = (Button)findViewById(R.id.MULTI);
		div = (Button)findViewById(R.id.DIV);
		igual = (Button)findViewById(R.id.IGUAL);
		positivo = (Button)findViewById(R.id.F1);
		memoria = (Button)findViewById(R.id.F2);
		borrarUno = (Button)findViewById(R.id.F3);
		borrar = (Button)findViewById(R.id.F4);
		
		//Asignaci�n al boton el listener:
		b0.setOnClickListener(l);
		b1.setOnClickListener(l);
		b2.setOnClickListener(l);
		b3.setOnClickListener(l);
		b4.setOnClickListener(l);
		b5.setOnClickListener(l);
		b6.setOnClickListener(l);
		b7.setOnClickListener(l);
		b8.setOnClickListener(l);
		b9.setOnClickListener(l);
		punto.setOnClickListener(l);
		suma.setOnClickListener(l);
		resta.setOnClickListener(l);
		multi.setOnClickListener(l);
		div.setOnClickListener(l);
		igual.setOnClickListener(l);
		positivo.setOnClickListener(l);
		memoria.setOnClickListener(l);
		borrarUno.setOnClickListener(l);
		borrar.setOnClickListener(l);	
		
		//Colorear los botones:
		String color="#D8D8D8";
		String color1="#FE9A2E";
		String color2="#8181F7";
		colorear(b0,color);
		colorear(b1, color);
		colorear(b2, color);
		colorear(b3, color);
		colorear(b4, color);
		colorear(b5, color);
		colorear(b6, color);
		colorear(b7, color);
		colorear(b8, color);
		colorear(b9, color);
		colorear(punto, color);
		colorear(suma, color1);
		colorear(resta, color1);
		colorear(multi, color1);
		colorear(div, color1);
		colorear(positivo, color2);
		colorear(igual, color);
		colorear(borrarUno, color2);
		colorear(borrar, color2);
		colorear(memoria, color2);
		
		
	}
	
	public void colorear(Button b, String color){
		b.getBackground().setColorFilter(Color.parseColor(color), PorterDuff.Mode.MULTIPLY);
	}
	
	//Asigna el numero al TextWiew
	public void numero(char num){
		if(primerNumero==true){ //Agrega el numero pulsado ala secuencia actual
			controlCero(num);
		}else{ //Borra primero la secuencia actual y despues a�ade el numero
			texto.setText("");
			controlCero(num);
			primerNumero=true;
		}
		primerOperacion=true;
	}
	
	public void controlCero(char num){
		String  text =texto.getText().toString();
		if(text.length()==0) //Si no hay nada, actuar normal
			texto.setText(text + num);
		else 
			if (String.valueOf(text.charAt(0)).equals("0")) {// Si el primer numero es cero
				if (!(String.valueOf(num).equals("0"))) // Si el numero pulsado
					texto.setText(text.substring(1, (text.length())) + num);
				else if (text.length() > 1 && (String.valueOf(text.charAt(1)).equals("."))) 
					texto.setText(text.substring(1, (text.length())) + num);
				
			} else {
				texto.setText(text + num);
			}
		
		
	}
	
	//El valor actual lo pasamos a string y hayamos en que posicion esta el punto, si no esta se a�ade uno:
	public void punto(){
		if(texto.getText().toString().indexOf('.')==-1)
			if(texto.getText().toString().length()==0)
				texto.setText("0.");
			else
				texto.setText(texto.getText().toString()+'.');
	}
	
	//Control de valor:
	public double controlDoble(){
		double valor=0;
		try {
			valor = Double.parseDouble((texto.getText().toString()));
		} catch (Exception e) {
			valor = 0;
		}
		return valor;
	}
	
	//Metodo para la asignaci�n de operaciones:
	public void operacion(char operacion){
		boolean salida=false; //Se declara como ayuda para cambiar el valor primerOperacion para evitar problemas
		if(primerOperacion){
			if(this.valor1==0){
				this.valor1= controlDoble();
				this.operacion1=operacion;
				primerNumero=false;
				
			}else{
				this.valor2= controlDoble();
				switch (operacion1) {
				case '+':
					total=valor1+valor2;
					valor1=total;
					salida=true;
					break;
				case '-': 
					total=valor1-valor2;
					valor1=total;
					break;
				case 'x':
					total=valor1*valor2;
					valor1=total;
					break;
				case '/':
					total=valor1/valor2;
					valor1=total;
					break;
				case '=':
					total=controlDoble();
				default:
					break;
				}
				texto.setText(String.valueOf(total));
				valor2=0;
				this.operacion1=operacion;
				if(operacion1=='='){
					valor1=0;
					salida=true;
				}
				primerNumero=false;
			}
		}else{
			this.operacion1=operacion;
		}
		primerOperacion=salida;
	}
		
	
	//Si el contenido del TextView no contiene un menos se agrega uno al principio, si lo contiene se le sustrae
	public void positivo(){
		String contenido=texto.getText().toString();
		if(texto.getText().toString().indexOf('-')==-1)
			texto.setText('-'+texto.getText().toString());
		else
			texto.setText(contenido.substring(1));
		
	}
	
	//Si es la primera vez que se pulsa guarda el contenido del Textview en una variable
	//Si es la seguna vez devuelve la variable al TextView y permite operar con ella
	public void memoria(){
		if(primerMemoria==false){
			memo=texto.getText().toString();
			colorear(memoria,"#00BFFF");
			primerMemoria=true;
		}else{
			texto.setText(memo);
			primerMemoria=false;
			primerOperacion=true;
			colorear(memoria,"#8181F7");
		}
		
	}
	
	//Borra el ultimo caracter del TextView
	public void borrarUno(){
		if(!(texto.getText().toString().length()==0))//Control para que no de error si no hay caracteres.
			texto.setText(texto.getText().toString().substring(0, (texto.getText().toString().length()-1)));		
	}
	
	//Borra todo el TextView y adem�s limpia las variables que guardan los valores de la operacion
	public void borrarTodo(){
		texto.setText("");
		valor1=0;
		valor2=0;
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}
